package com.hejing.File类及其相关方法;

import org.junit.Test;

import java.io.File;
import java.io.IOException;

/**
 * ClassName: FileTest01
 * Package: com.hejing.File类及其相关方法
 * Description:
 *
 * @Author: HeJing
 * @Create: 2023-05-30 14:13
 * @Version: 1.0
 */
public class FileTest01 {

    /**
     * -> public String getName(): 获取名称
     * -> public String getPath(): 获取路径
     * -> public String getAbsolutePath(): 获取绝对路径 String。
     * -> public File getAbsoluteFile(): 获取绝对路径表示的文件 File
     * -> public String getParent(): 获取上层文件目录路径，若无，返回null
     * -> public long length(): 获取文件长度(字节数)，但是并不能获取目录的长度
     * -> public long lastModified(): 获取最后一次的修改时间，毫秒值。
     *
     */
    @Test
    public void test01(){
        File file01 = new File("D:\\HeJing_Java\\io_test", "hello.txt");
        System.out.println(file01.getName());          // hello.txt
        System.out.println(file01.getPath());          // D:\HeJing_Java\io_test\hello.txt
        System.out.println(file01.getAbsolutePath());  // D:\HeJing_Java\io_test\hello.txt
        System.out.println(file01.getAbsoluteFile());  // D:\HeJing_Java\io_test\hello.txt
        System.out.println(file01.getParent());        // D:\HeJing_Java\io_test
        System.out.println(file01.length());           // 11
        System.out.println(file01.lastModified());     // 1681130551032
    }

    @Test
    public void test02(){
        File file01 = new File("hello.txt");
        System.out.println(file01.getName());         // hello.txt
        System.out.println(file01.getPath());         // hello.txt
        System.out.println(file01.getAbsolutePath()); // D:\HeJing_Java\codes\JavaSECodeFromShangGuiGu\chapter15_io\hello.txt
        System.out.println(file01.getAbsoluteFile()); // D:\HeJing_Java\codes\JavaSECodeFromShangGuiGu\chapter15_io\hello.txt
        System.out.println(file01.getParent());       // null
        System.out.println(file01.getAbsoluteFile().getParent()); // D:\HeJing_Java\codes\JavaSECodeFromShangGuiGu\chapter15_io
        System.out.println(file01.length());          // 0
        System.out.println(file01.lastModified());    // 0
    }

    /**
     * -> public String[] list(): 返回一个String数组，表示该File目录中的所有子文件或目录
     * -> public File[] listFiles(): 返回一个File数组，表示该File目录中的所有的子文件或目录。
     */
    @Test
    public void test03(){
        File file01 = new File("D:\\HeJing_Java\\io_test");
        String[] fileArr = file01.list();
        for(String s: fileArr){
            System.out.println(s);
        }

        System.out.println("*****************");
        File[] files = file01.listFiles();
        for(File f: files) {
            // System.out.println(f);
            System.out.println(f.getName());
        }
    }

    /**
     * -> public boolean renameTo(File dest): 把文件重命名为指定的文件路径。
     *
     * 举例:
     *  file1.renameTo(file2): 要想此方法执行完毕返回true, 要求:
     *  file1必须存在，file2必须不存在，file2所在的文件目录必须存在。
     */
    @Test
    public void test04(){

        File file01 = new File("D:\\HeJing_Java\\io_test\\hello.txt");
        File file02 = new File("D:\\HeJing_Java\\io_test\\a.txt");

        boolean renameSuccess = file01.renameTo(file02);
        System.out.println(renameSuccess? "重命名成功": "重命名失败");
    }

    /**
     *  -> public boolean exists(): 此File表示的文件或目录是否实际存在。
     *  -> public boolean isDirectory(): 此File表示的是否是目录
     *  -> public boolean isFile(): 此File表示的是否是文件
     *  -> public boolean canRead(): 判断是否可读
     *  -> public boolean canWrite(): 判断是否可写
     *  -> public boolean isHidden(): 判断是否隐藏。
     */
    @Test
    public void test05(){

        File file01 = new File("D:\\HeJing_Java\\io_test\\a.txt");
        System.out.println(file01.exists());        // true
        System.out.println(file01.isDirectory());   // false
        System.out.println(file01.isFile());        // true
        System.out.println(file01.canRead());       // true
        System.out.println(file01.canWrite());      // true
        System.out.println(file01.isHidden());      // false
    }

    /**
     * -> public boolean createNewFile(): 创建文件。若文件存在则不创建，返回false
     *      -> public boolean mkdir(): 创建文件目录，如果此文件目录存在就不创建，如果此文件目录的上层目录也不存在，则不创建。
     *      -> public boolean mkdirs(): 创建文件目录，如果此文件上层文件目录不存在，一并创建。
     *      -> public boolean delete(): 删除文件或者文件夹
     *          -> 删除注意事项:
     *              -> (1) Java中的删除不走回收站
     *              -> (2) 要删除一个文件目录，请注意该文件目录内不能包含内容(文件或者文件目录)。
     */
    @Test
    public void test06() throws IOException {

        // 测试文件的创建和删除
        File file01 = new File("D:\\HeJing_Java\\io_test\\hello.txt");
        if(!file01.exists()) {
            boolean isSuccessed = file01.createNewFile();
            if(isSuccessed) {
                System.out.println("创建成功");
            }
        } else {
            System.out.println("文件已存在");
            boolean isDelete = file01.delete();
            if (isDelete) System.out.println("文件删除成功");
            else System.out.println("文件删除失败");
        }
    }

    @Test
    public void test08(){
        // 测试目录的创建
        File file01 = new File("D:\\HeJing_Java\\io_test\\io1");
        System.out.println(file01.mkdir());

        File file02 = new File("D:\\HeJing_Java\\io_test\\io2\\io2_test01");
        System.out.println(file02.mkdirs());
    }

    @Test
    public void test09(){
        // 测试目录的删除
        File file01 = new File("D:\\HeJing_Java\\io_test\\io1");
        File file02 = new File("D:\\HeJing_Java\\io_test\\io2");

        System.out.println(file01.delete());  // 删除单层目录  true
        System.out.println(file02.delete());  // 删除多层目录  false

    }
}




















